package CoteClient;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;


public class Audio implements Runnable {

    private TargetDataLine line;
    private File file;
    private ByteArrayOutputStream outputStream;
    private AudioFormat audioFormat;
    private static final AudioFileFormat.Type targetType = AudioFileFormat.Type.WAVE;
	private boolean stop=false;	

	public void stop() {
		stop=true;
	}
	
	
    public void init() {

        audioFormat = new AudioFormat(44100, 16, 2, true, true);

        // En plus du format du flux audio d'entr�e il est n�cessaire de
        // sp�cifier le type de DataLine qu'on veut
        // ici le DataLine qu'on souhaite est un SourceDataLine qui permet
        // la
        // lecture (targetDataLine permet l'enregistrement).

        DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);

        if (!AudioSystem.isLineSupported(info)) {
            System.err.println("Audio Format specified is not supported");
            return;
        }

        // On r�cup�re le DataLine ad�quat
        try {
            line = (TargetDataLine) AudioSystem.getLine(info);

        } catch (LineUnavailableException e) {
            e.printStackTrace();
            return;
        }

    }

    public void run() {

        // on ouvre le Dataline
        try {
            line.open(audioFormat);
        } catch (LineUnavailableException e1) {
            e1.printStackTrace();
            return;
        }

        // pour que le flux soit effectivement redirig� sur la carte son il
        // faut
        // demarrer la ligne
        line.start();
        AudioInputStream audioInputStream = new AudioInputStream(line);

        try {
            AudioSystem.write(audioInputStream, targetType, file);
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            line.close();
            try {
                audioInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        line.stop();
        line.close();

    }

    public void setFile(File file) {
        this.file = file;
    }

    public TargetDataLine getLine() {
        return line;
    }

}